home *** CD-ROM | disk | FTP | other *** search
/ STraTOS 1997 April & May / STraTOS 1 - 1997 April & May.iso / CD01 / PRGMANIA / VERSION1.5 / TEST.C < prev    next >
Encoding:
C/C++ Source or Header  |  1996-12-28  |  17.2 KB  |  662 lines

  1. /*************************************************************************
  2.  * Test - (c) 1996 Philippe Castella                                     *
  3.  * Programme de test de la librarie WindGem                              *
  4.  *************************************************************************/
  5.  
  6. /*************************************************************************
  7.  * Fichiers à inclure                                                    *
  8.  *************************************************************************/
  9. #include <WindGem.h>        /* Formulaires en fenêtre */
  10. #include <xgemfast.h>
  11. #include "audio.h"
  12. #include "test.h"                /* Définition des objets  */
  13. #include <macros.h>
  14. #include <falcon30.h>
  15.  
  16. /*************************************************************************
  17.  * Prototypes des fonctions du programme                                 *
  18.  *************************************************************************/
  19. static int UserImg[] =
  20. {
  21.   0xffff,0xffff,0x8000,0x0001,0xbfff,0xfffd,0xa000,0x0005,
  22.   0xa000,0x0005,0xa000,0x0005,0xa000,0x0005,0xa000,0x0005,
  23.   0xa000,0x0005,0xa000,0x0005,0xa813,0xf3e5,0xa814,0x0a15,
  24.   0xa814,0x0215,0xa814,0x0215,0xa812,0x0215,0xa811,0x0225,
  25.   0xa810,0xc2c5,0xa810,0x2285,0xa810,0x1245,0xa810,0x0a25,
  26.   0xa814,0x0a15,0xa7e3,0xf215,0xa000,0x0005,0xafff,0xfff5,
  27.   0xa000,0x0005,0xa000,0x0005,0xa000,0x0005,0xa000,0x0005,
  28.   0xa000,0x0005,0xbfff,0xfffd,0x8000,0x0001,0xffff,0xffff,
  29. };
  30.  
  31. static BITBLK user_icn = {(short *)&UserImg[0],4,32,0,0,1};
  32.  
  33. void gereMenuWind(int opt);
  34. void gereMenuText(int opt);
  35. void gereMenu(int option);
  36. void main(void);
  37. void init_prog(void);
  38.  
  39. void informe(int evnt);
  40. void form(int evnt);
  41. void systeme(int evnt);
  42. void form1(int evnt);
  43.  
  44. void UserInit (void);
  45. void UserExit (void);
  46. void UserMessage (int evnt, int buff[8]);
  47. void UserClavier (int kbd, int key);
  48. void UserSouris (int x, int y, int k, int nb);
  49.  
  50.  
  51. extern System *Sys;
  52.  
  53. /*************************************************************************
  54.  * Paramètres de l'application                                           *
  55.  *************************************************************************/
  56. int finProg = FALSE;
  57. int ouvert = FALSE;
  58. int user = 0;
  59. int snd = TRUE;
  60.  
  61. char texte[50][30];
  62. char **textUser;
  63.  
  64. struct samp_list *p;
  65. struct samp_list *root;                      /* root of list                        */
  66.  
  67. void gereMenuWind(int opt)
  68. {
  69.     form_alert(1,"[1][|Gestion d'un Menu en fenêtre !!|][Ok]");    
  70. }
  71.  
  72. void gereMenuText(int opt)
  73. {
  74.     static int count = 0;
  75.     int nblig, nbcol;
  76.     char **texte, lig[20];
  77.     
  78.     switch (opt)
  79.     {
  80.         case MTFERME :
  81.             WindDelete (CurWindow);
  82.             break;
  83.         case MTMODIF :
  84.             nblig = GetWindText (CurWindow, &texte, &nbcol);
  85.             sprintf(lig,"<< Change ligne %d >>", count);
  86.             strcpy(texte[count], lig);
  87.             count++;
  88.             SetWindText (CurWindow, nblig, nbcol, texte);
  89.             break;        
  90.     }
  91.  
  92. }
  93.  
  94. void gereToolBar(int opt)
  95. {
  96.     form_alert(1,"[1][|Gestion d'une ToolBar en fenêtre !!|][Ok]");    
  97.     ToolBarUnselect (CurWindow, opt, REDRAW);
  98. }
  99.  
  100. void gerePopup (int option)
  101. {
  102.     switch (option)
  103.     {
  104.     case POP1 :
  105.     case POP2 :
  106.     case POP3 :
  107.     case POP4 :
  108.         form_alert(1,"[1][|Gestion d'un popup Menu par appui|sur la touche droite de la souris !!|][Ok]");
  109.         break;
  110.     }
  111. }
  112.  
  113. void gereMenu (int option)
  114. {
  115.     char chemin[128], fname[13] = {0};
  116.     char message[256];
  117.     int numTxt, numTxt1, ret;
  118.     GRECT Fpos;
  119.     int i;
  120.     static icn = -1;
  121.  
  122.     int wx, wy, ww, wh;
  123.                 
  124.     switch (option)
  125.     {
  126.     case MSYST :
  127.         WindOpen(SYSTEME);
  128.         break;
  129.  
  130.     case MFORM :
  131.         WindOpen(FORM);
  132.         break;
  133.  
  134.     case MTEXTE :
  135.         strcpy(chemin,"\\");
  136.         if (selector (chemin, "*.*", fname, "Choisir un fichier texte"))
  137.         {
  138.             if (strcmp(fname,"") != 0)
  139.             {
  140.                 Fpos.g_x = 100;
  141.                 Fpos.g_y = 100;
  142.                 Fpos.g_w = 400;
  143.                 Fpos.g_h = 300;
  144.                 strcat(chemin, fname);
  145.                 numTxt = WindTextInit (chemin, &Fpos, (char *)NULL);
  146. /*                AjouteToolBar(numTxt, TOOLBAR, NODRAW, gereToolBar);*/
  147.                 AjouteMenu(numTxt, MENUTEXT, NODRAW, gereMenuText);
  148.                 WindOpen(numTxt);
  149.             }
  150.         }
  151.         break;
  152.  
  153.     case MTEXTE1 :
  154.         Fpos.g_x = 200;
  155.         Fpos.g_y = 100;
  156.         Fpos.g_w = 400;
  157.         Fpos.g_h = 300;
  158.         numTxt1 = WindTextInit ("", &Fpos, "Contenu géré par l'utilisateur");
  159.         AjouteMenu(numTxt1, MENUTEXT, NODRAW, gereMenuText);
  160.         WindOpen(numTxt1);
  161.         SetWindText (numTxt1, 50, 19, textUser);
  162.         break;
  163.         
  164.     case MUSER :
  165.         WindOpen(user);        
  166.         break;
  167.  
  168.     case MSLIDER :
  169.         
  170.         SetSlider(SLIDINI, 100, 0, "Essai du Slider");
  171.  
  172.         for (i=0;i < 100;i++)
  173.             SetSlider(SLIDAFF, 0, i, "");
  174.             
  175.         SetSlider(SLIDEND, 0, 0, "");
  176.  
  177.         break;
  178.         
  179.     case MINFO :
  180.         WindOpen(PROGINFO);
  181.         break;
  182.  
  183.     case MALERTE :
  184.         strcpy (message, "Boîte d'alerte - |");
  185.         strcat (message, "On a maintenant droit à 6 lignes de texte (dont titre)|");
  186.         strcat (message, "d'une longueur maximale de 60 caractères.|");
  187.         strcat (message, "Et de quatre boutons d'au maximum 20 caractères|");
  188.         strcat (message, "Avec 14 icônes définis et éventuellement la...|");
  189.         strcat (message, "...possibilité de fournir son propre icône.");
  190.         ret = WindAlerte (icn++, &user_icn, message, "Bouton 1|Bouton 2|Bouton 3|Bouton 4", 1);
  191.     break;
  192.     
  193.     case MQUITTER :
  194.         finProg = TRUE;
  195.         break;
  196.     }
  197. }
  198.  
  199. /*-----------------------------------------------------------------------*/
  200. void main(void)
  201. /*-----------------------------------------------------------------------*
  202.  * Fonction principale                                                   *
  203.  * - Initialisation,                                                     *
  204.  * - Gestion des événements,                                             *
  205.  * - Fin du programme.                                                   *
  206.  *-----------------------------------------------------------------------*/
  207. {
  208.     int i;
  209.     textUser = (char **)malloc(50 * sizeof(char **));
  210.  
  211.     for (i = 0; i < 50; i++)
  212.     {
  213.         sprintf (texte[i], "Ligne de texte n°%2d", i + 1);
  214.     textUser[i] = texte[i];
  215.   }
  216.  
  217.     init_prog();
  218.  
  219.     if (Ordi.Machine == FALCON30 && AudioInit() != SND_OK)
  220.     {
  221.         form_alert(1, "[1][Système Audio déjà verouillé !!][Ok]");
  222.         snd = FALSE;
  223.     }
  224.  
  225.     AjouteSample(SMP_AVR, "COUCOU.AVR", "COUCOU");
  226.     do
  227.     {
  228.         EventMulti();
  229.     } while (NOT finProg);
  230.  
  231.     free (textUser);            /* Texte définit par l'utilisateur -> libérer la */
  232.                                                 /* mémoire soi-même !!!                          */
  233.     if (snd && Ordi.Machine == FALCON30)
  234.         AudioExit();
  235.  
  236.     AppExit();
  237.     exit(0);
  238. }
  239.  
  240. void init_prog(void)
  241. {
  242.     GRECT pos;
  243. /*    int Xd, Yd, Wd, Hd, Xr, Yr, N, Wh, Hh;*/
  244.     
  245.     AppInit("Test.rsc", DESK, (void *)NULL, MENU, gereMenu);
  246.  
  247. /* Affichage de quelques info système.
  248.     GetCharSize (&Wh, &Hh);
  249.     GetDeskXYWH (&Xd, &Yd, &Wd, &Hd);
  250.     GetVideoRes (&Xr, &Yr, &N);
  251.     sprintf (mes, "[1][Desk x=%d y=%d w=%d h=%d|Char w=%d h=%d|Res x=%d y=%d plans=%d][Ok]",Xd, Yd, Wd, Hd, Wh,Hh, Xr, Yr, N);
  252.     form_alert(1,mes);
  253. */    
  254.     WindFormInit(PROGINFO, WMODAL , 0, 0, "Informations"            , 0      , informe   );
  255.     WindFormInit(FORM    , WNORM , 0, 0, "Créer une nouvelle fiche", STIT, form);
  256.     AjoutePopup (FORM, SCAT, POPUP);
  257.  
  258. /*    AjouteMenu(FORM, WMENU, NODRAW, gereMenuWind);*/
  259.     AjouteToolBar(FORM, TOOLBAR, NODRAW, gereToolBar);
  260.  
  261.     AjouteAide (FORM, SSAUV, "Bouton menu...|Permet d'ajouter ou d'enlever|dynamiquement un menu...");
  262.     AjouteAide (FORM, SANNU, "Bouton d'annulation|Ferme la fiche sans sauvegarde|de son contenu...");
  263.     AjouteAide (FORM, SCAT, "Bouton de popup|Permet de sélectionner la catégorie|du livre...");
  264.     AjouteAide (FORM, SAIDE, "Bouton HELP|Permet de faire appel à l'aide en ligne|enfin bientôt...");
  265.  
  266.     WindFormInit(SYSTEME, WNORM , 0, 0, "Information Système", 0, systeme);
  267.  
  268.  
  269.     pos.g_x = 40;
  270.     pos.g_y = 40;
  271.     pos.g_w = 300;
  272.     pos.g_h = 200;
  273. /*    user = WindUserInit ((NAME|CLOSER|FULLER|MOVER|SMALLER|SIZER), pos, "Fenêtre User Defined", UserInit, UserExit, UserMessage, UserClavier, UserSouris, (void *)NULL);*/
  274.     user = WindUserInit ((NAME|CLOSER|FULLER|MOVER|SMALLER|SIZER), pos, "Fenêtre User Defined", UserInit, (void *)NULL, UserMessage, (void *)NULL, UserSouris, (void *)NULL);
  275.  
  276. /*    AjouteMenu(user, WMENU, NODRAW, gereMenuWind);*/
  277.     AjouteToolBar(user, TOOLBAR, NODRAW, gereToolBar);
  278.  
  279.     PopMenu(POPUPM, gerePopup);
  280. }
  281.  
  282.  
  283. /*-----------------------------------------------------------------------*
  284.  * Routines de gestion du menu                                           *
  285.  *-----------------------------------------------------------------------*/
  286. void informe(int evnt)
  287. {
  288.     int choix;
  289.     
  290.     if (evnt & MU_BUTTON)
  291.     {
  292.         choix = GetObjet();
  293.         if (choix > 0)
  294.         {
  295.             ObjcUnselect (PROGINFO, choix);
  296.             if (snd && Ordi.Machine == FALCON30)
  297.                 if (WindAlerte (ICN_QUEST1, (BITBLK *)0, "Question...|Voulez-vous écouter un échantillon sonore ?", "Oui|Non", 1) == 1)
  298.                     PlaySample("COUCOU");
  299.  
  300.             WindClose(PROGINFO);
  301.         }
  302.     }
  303. }
  304.  
  305. void form(int evnt)
  306. {
  307.     int choix;
  308.     static int flag = FALSE;
  309.  
  310.     if (evnt == EV_OPEN)
  311.     {
  312.         form_alert(1,"[1][Fonction appelee à |l'ouverture de la fenetre][Ok]");
  313.         ToolBarSelect (FORM, TBOPT2, NODRAW);
  314.     }        
  315.     if (evnt == EV_CLOSE)
  316.     {
  317.         form_alert(1,"[1][Fonction appelee à |la fermeture de la fenetre][Ok]");
  318.         /* ATTENTION : ne pas fermer la fenetre */
  319.     }        
  320.     if (evnt & MU_BUTTON)
  321.     {
  322.         choix = GetObjet();
  323.  
  324.         if (choix == SSAUV)
  325.         {
  326.             if (! flag)
  327.             {
  328.                 flag = TRUE;
  329.                 form_alert(1,"[1][Ajout d'un menu dynamiquement][Ok]");
  330.                 AjouteMenu(FORM, WMENU, REDRAW, gereMenuWind);
  331. /*                AjouteToolBar(FORM, TOOLBAR, REDRAW, gereToolBar);*/
  332.             }
  333.             else
  334.             {
  335.                 flag = FALSE;
  336.                 form_alert(1,"[1][Suppression d'un menu dynamiquement][Ok]");
  337.                 EnleveMenu(FORM, REDRAW);
  338. /*                EnleveToolBar(FORM, REDRAW);*/
  339.             }        
  340.         }
  341.  
  342.         if (choix == SAIDE)
  343.         {
  344.             StGuide ("WindGem.Hyp", "StGuide");
  345.         }
  346.  
  347.         if (choix == SANNU || choix == SSAUV || choix == SAIDE)
  348.             ObjcUnselect (FORM, choix);
  349.  
  350.         if (choix == SANNU || choix == EV_CLOSE)
  351.             WindClose(FORM);
  352.     }
  353. }
  354.  
  355. void systeme(int evnt)
  356. {
  357.     int choix;
  358.     char txt[30];
  359.     
  360.     if (evnt == EV_OPEN)
  361.     {
  362.         switch (Ordi.Processor)
  363.         {
  364.             case M68000 :
  365.                 SetValeur (SYSTEME, SYSPROC, "68000");
  366.                 break;
  367.             case M68010 :
  368.                 SetValeur (SYSTEME, SYSPROC, "68010");
  369.                 break;
  370.             case M68020 :
  371.                 SetValeur (SYSTEME, SYSPROC, "68020");
  372.                 break;
  373.             case M68030 :
  374.                 SetValeur (SYSTEME, SYSPROC, "68030");
  375.                 break;
  376.         }
  377.         if (Ordi.Machine == ST)
  378.                 SetValeur (SYSTEME, SYSMACH, "ST        ");
  379.         else if (Ordi.Machine == STE)
  380.                 SetValeur (SYSTEME, SYSMACH, "STE       ");
  381.         else if (Ordi.Machine == MSTE)
  382.                 SetValeur (SYSTEME, SYSMACH, "Mega STE  ");
  383.         else if (Ordi.Machine == TT)
  384.                 SetValeur (SYSTEME, SYSMACH, "TT 030    ");
  385.         else if (Ordi.Machine == FALCON30)
  386.                 SetValeur (SYSTEME, SYSMACH, "Falcon 030");
  387.         else
  388.                 SetValeur (SYSTEME, SYSMACH, "Inconnue  ");
  389.  
  390.         switch (hibyte(hiword(Ordi.Fdc)))
  391.         {
  392.             case 0 :
  393.                 SetValeur(SYSTEME, SYSFDC, "DD");
  394.                 break;
  395.             case 1 :
  396.                 SetValeur(SYSTEME, SYSFDC, "HD");
  397.                 break;
  398.             case 2 :
  399.                 SetValeur(SYSTEME, SYSFDC, "ED");
  400.                 break;
  401.         }
  402.  
  403.         switch (Ordi.Keyboard)
  404.         {
  405.             case KEYB_USA :
  406.                 SetValeur (SYSTEME, SYSCLAV, "USA     ");
  407.                 break;
  408.             case KEYB_D :
  409.                 SetValeur (SYSTEME, SYSCLAV, "Allemand");
  410.                 break;                
  411.             case KEYB_F :
  412.                 SetValeur (SYSTEME, SYSCLAV, "Français");
  413.                 break;
  414.             case KEYB_GB :
  415.                 SetValeur (SYSTEME, SYSCLAV, "Anglais ");
  416.                 break;
  417.             case KEYB_SP :
  418.                 SetValeur (SYSTEME, SYSCLAV, "Espagnol");
  419.                 break;
  420.             case KEYB_I :
  421.                 SetValeur (SYSTEME, SYSCLAV, "Italien ");
  422.                 break;
  423.             case KEYB_CHD :
  424.                 SetValeur (SYSTEME, SYSCLAV, "Suisse D");
  425.                 break;
  426.             case KEYB_CHF :
  427.                 SetValeur (SYSTEME, SYSCLAV, "Suisse F");
  428.                 break;
  429.         }
  430.         switch (Ordi.Language)
  431.         {
  432.             case LG_USA :
  433.                 SetValeur (SYSTEME, SYSLANG, "USA     ");
  434.                 break;
  435.             case LG_D :
  436.                 SetValeur (SYSTEME, SYSLANG, "Allemand");
  437.                 break;                
  438.             case LG_F :
  439.                 SetValeur (SYSTEME, SYSLANG, "Français");
  440.                 break;
  441.             case LG_GB :
  442.                 SetValeur (SYSTEME, SYSLANG, "Anglais ");
  443.                 break;
  444.             case LG_SP :
  445.                 SetValeur (SYSTEME, SYSLANG, "Espagnol");
  446.                 break;
  447.             case LG_I :
  448.                 SetValeur (SYSTEME, SYSLANG, "Italien ");
  449.                 break;
  450.             case LG_CHD :
  451.                 SetValeur (SYSTEME, SYSLANG, "Suisse D");
  452.                 break;
  453.             case LG_CHF :
  454.                 SetValeur (SYSTEME, SYSLANG, "Suisse F");
  455.                 break;
  456.         }
  457.         if (Ordi.Shifter == SHIFTER_ST)
  458.             SetValeur(SYSTEME, SYSSHIF, "ST    ");
  459.         else if (Ordi.Shifter == SHIFTER_STE)    
  460.             SetValeur(SYSTEME, SYSSHIF, "STE   ");
  461.         else if (Ordi.Shifter == SHIFTER_TT)
  462.             SetValeur(SYSTEME, SYSSHIF, "TT    ");
  463.         else if (Ordi.Shifter == VIDEL_FALCON)
  464.             SetValeur(SYSTEME, SYSSHIF, "Falcon");
  465.         else
  466.             SetValeur(SYSTEME, SYSSHIF, "??????");
  467.  
  468.         strcpy(txt, "");
  469.         if (Ordi.Sound & PSG)
  470.             strcat(txt, "PSG ");
  471.         if (Ordi.Sound & DSP)
  472.             strcat(txt, "DSP ");
  473.         if (Ordi.Sound & CODEC)
  474.             strcat(txt, "CODEC ");
  475.         if (Ordi.Sound & MATRICE)
  476.             strcat(txt, "MATRICE ");
  477.  
  478.         strcomplete (txt, 24, ' ', INS_APRES);
  479.         SetValeur (SYSTEME, SYSSND, txt);
  480.         switch (Ordi.Fpu)
  481.         {
  482.             case NO_FPU :
  483.                 SetValeur (SYSTEME, SYSFPU, "Aucun       ");
  484.                 break;
  485.             case SFP004 :
  486.                 SetValeur (SYSTEME, SYSFPU, "SFP004      ");
  487.                 break;
  488.             case C68881_2 :
  489.                 SetValeur (SYSTEME, SYSFPU, "C68881_2    ");
  490.                 break;
  491.             case C68881_2_SFP :
  492.                 SetValeur (SYSTEME, SYSFPU, "C68881_2_SFP");
  493.                 break;
  494.             case C68881 :
  495.                 SetValeur (SYSTEME, SYSFPU, "C68881      ");
  496.                 break;
  497.             case C68881_SFP :
  498.                 SetValeur (SYSTEME, SYSFPU, "C68881_SFP  ");
  499.                 break;
  500.             case C68882 :
  501.                 SetValeur (SYSTEME, SYSFPU, "C68882      ");
  502.                 break;
  503.             case C68882_SFP :
  504.                 SetValeur (SYSTEME, SYSFPU, "C68882_SFP  ");
  505.                 break;
  506.             case C68040 :
  507.                 SetValeur (SYSTEME, SYSFPU, "C68040      ");
  508.                 break;
  509.             case C68040_SFP :
  510.                 SetValeur (SYSTEME, SYSFPU, "C68040_SFP  ");
  511.                 break;
  512.         }
  513.         switch (Ordi.Date)
  514.         {
  515.             case DATE_MJA :
  516.                 SetValeur (SYSTEME, SYSDATE, "MJA");
  517.                 break;
  518.             case DATE_JMA :
  519.                 SetValeur (SYSTEME, SYSDATE, "JMA");
  520.                 break;
  521.             case DATE_AMJ :
  522.                 SetValeur (SYSTEME, SYSDATE, "AMJ");
  523.                 break;
  524.             case DATE_AJM :
  525.                 SetValeur (SYSTEME, SYSDATE, "AJM");
  526.                 break;
  527.         }
  528.         sprintf(txt, "%c",Ordi.Separator);
  529.         SetValeur(SYSTEME, SYSSEP, txt);
  530.  
  531.         if (Ordi.Time)
  532.             SetValeur (SYSTEME, SYSTIME, "12");
  533.         else
  534.             SetValeur (SYSTEME, SYSTIME, "24");
  535.  
  536.         sprintf (txt, "%X", Ordi.TosVersion);
  537.         SetValeur (SYSTEME, SYSTOS, txt);
  538.  
  539.         sprintf (txt, "%X%X", lobyte(Ordi.GemdosVersion), hibyte(Ordi.GemdosVersion));
  540.         SetValeur (SYSTEME, SYSGEMD, txt);
  541.         sprintf (txt, "%X", Ordi.AesVersion);
  542.         SetValeur (SYSTEME, SYSAES, txt);
  543.         if (Ordi.MultiTosVersion == 0)
  544.             SetValeur (SYSTEME, SYSMINT, "Non");
  545.         else
  546.         {
  547.             sprintf (txt, "%X", Ordi.MultiTosVersion);
  548.             SetValeur (SYSTEME, SYSMINT, txt);
  549.         }
  550.         if (Ordi.Magic)
  551.             SetValeur (SYSTEME, SYSMAG, "Oui");
  552.         else
  553.             SetValeur (SYSTEME, SYSMAG, "Non");
  554. }
  555.     
  556.     if (evnt & MU_BUTTON)
  557.     {
  558.         choix = GetObjet();
  559.         if (choix > 0)
  560.         {
  561.             ObjcUnselect (SYSTEME, choix);
  562.             WindClose(SYSTEME);
  563.         }
  564.     }
  565. }
  566. /************************************************************************/
  567. /* Fonctions de gestion de la fenêtre utilisteur                        */
  568. /************************************************************************/
  569. void UserInit (void)
  570. {
  571.         form_alert(1,"[1][User : Init][Ok]");
  572. }
  573.  
  574. void UserExit (void)
  575. {
  576.         form_alert(1,"[1][User : Exit][Ok]");
  577. }
  578.  
  579. void UserMessage (int evnt, int buff[8])
  580. {
  581.     GRECT rd, coord, r;
  582.     int h, xy[4];
  583.  
  584.     h = GetHandle (user);
  585.         
  586. /*
  587.     if (evnt == MU_MESAG)
  588.         form_alert(1,"[1][User : Message][Ok]");
  589.     else
  590.         form_alert(1,"[1][User : Touche spéciale][Ok]");
  591. */
  592.  
  593.     if (evnt == MU_MESAG)
  594.     {
  595.         switch(buff[0])
  596.         {
  597.             case WM_REDRAW :
  598.                 rd.g_x = buff[4]; rd.g_y = buff[5];
  599.                 rd.g_w = buff[6]; rd.g_h = buff[7];        
  600.                 GetWorkXYWH (user, &coord);
  601.  
  602.                 v_hide_c (VdiHandle);    /* Virer la souris */
  603.                 wind_update (BEG_UPDATE);     /* Bloquer les fonctions de la souris */
  604.  
  605.                 /* Demande les coord. et dimensions du 1° rectangle de la liste */
  606.                 wind_get (buff[3], WF_FIRSTXYWH, &r.g_x, &r.g_y, &r.g_w, &r.g_h);
  607.  
  608.                 while (r.g_w && r.g_h)            /* Tant qu'il y a largeur ou hauteur... */
  609.                 {
  610.                     set_clip (1, &r);     /* Clipping ON */
  611.                     if (rc_intersect (&rd, &r)) /* Si intersection des 2 zones */
  612.                     {
  613.                   xy[0] = r.g_x;
  614.                   xy[1] = r.g_y;
  615.                   xy[2] = xy[0] + r.g_w - 1;
  616.                   xy[3] = xy[1] + r.g_h - 1;
  617.  
  618.                   vsf_color(VdiHandle, BLACK);
  619.                         vr_recfl(VdiHandle, xy);
  620.         
  621.                     }
  622.                     /* Rectangle suivant */
  623.                     set_clip (0, &r);     /* Clipping OFF */
  624.                     wind_get (buff[3], WF_NEXTXYWH, &r.g_x, &r.g_y, &r.g_w, &r.g_h);
  625.                 }
  626.                 wind_update(END_UPDATE);
  627.                 v_show_c (VdiHandle, 1);             /* Rappeler la souris */
  628.  
  629.                 break;
  630.  
  631.         }
  632.     }    
  633. }
  634.  
  635. void UserClavier (int kbd, int key)
  636. {
  637.         form_alert(1,"[1][User : Clavier][Ok]");
  638. }
  639.  
  640. void UserSouris (int x, int y, int k, int nb)
  641. {
  642.     int pxy[4];
  643.     GRECT r;
  644. /*        form_alert(1,"[1][User : Souris][Ok]");*/
  645.  
  646.     GetWorkXYWH (user, &r);
  647.     v_hide_c (VdiHandle);
  648.     set_clip (1, &r);     /* Clipping ON */
  649.     /* Affichage d'un point sous le curseur de la souris */
  650.   vsl_color (VdiHandle, WHITE);
  651.     pxy[0] = x;
  652.     pxy[1] = y;
  653.     pxy[2] = x;
  654.     pxy[3] = y;
  655.   v_pline (VdiHandle, 2, pxy);
  656.     set_clip (0, &r);     /* Clipping OFF */
  657.     v_show_c (VdiHandle,1);
  658.     
  659. }
  660.  
  661. /*----------------------------------------------------------------------*/
  662.